package com.c3po.utils;

import java.beans.PropertyVetoException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class JdbcUtil {
	    private static final JdbcUtil instance=new JdbcUtil();  
	    private static ComboPooledDataSource dataSource=new ComboPooledDataSource();
	    private static Properties config = new Properties();  

	    private JdbcUtil(){}  


		public static JdbcUtil getInstance() {
			return instance;
		}
		 /** 
	     * 此处可以不配置，采用默认也行 
	     */  
	    static{    
	        try {  
	        	//装载配置文件  
	            config.load(JdbcUtil.class.getClassLoader()  
	                    .getResourceAsStream("c3p0.properties")); 	
//	            dataSource.setProperties(config);
//	            //设置数据库连接驱动  
//	            dataSource.setDriverClass(  
//	                    config.getProperty("driverClass")); 
//	            System.out.println(config.getProperty("driverClass"));
//	            //设置数据连接URL  
//	            dataSource.setJdbcUrl(  
//	                    config.getProperty("jdbcUrl"));
//	            System.out.println(config.getProperty("jdbcUrl"));
//	            //设置数据库连接用户账号  
//	            dataSource.setUser(  
//	                    config.getProperty("user"));
//	            System.out.println(config.getProperty("user"));
//	            //设置数据库连接用户账号的密码  
//	            dataSource.setPassword(  
//	                    config.getProperty("password"));  
//	            System.out.println(config.getProperty("password"));
	            //设置数据库连接驱动  
	            dataSource.setDriverClass("com.mysql.jdbc.Driver"); 
	            //设置数据连接URL  
	            dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/pool");
	            //设置数据库连接用户账号  
	            dataSource.setUser("root");
	            //设置数据库连接用户账号的密码  
	            dataSource.setPassword("123456");  
	  
	            //设置数据库连接池中的初始化连接对象数量  
	            dataSource.setInitialPoolSize(30);            
	            //设置数据库连接池中的最小连接对象数量  
	            dataSource.setMinPoolSize(30);  
	            //设置数据库连接池中的最大连接对象数量  
	            dataSource.setMaxPoolSize(60);  
	            //当连接不够，每次新增连接数量  
	            dataSource.setAcquireIncrement(10);  
	        }catch (IOException e) {  
	            e.printStackTrace();  }
	        catch (PropertyVetoException e) {  
	            e.printStackTrace();  
	        }  
	       }  



		/**
		 * 获得数据库连接
		 * 
		 * @return Connection
		 */
		public static Connection getConnection() {
			try {
				return dataSource.getConnection();
			} catch (SQLException e) {
				e.printStackTrace();
				return null;
			}
		}

		/**
		 * 数据库关闭操作
		 * 
		 * @param conn
		 * @param st
		 * @param pst
		 * @param rs
		 */
		public static void close(Connection conn, PreparedStatement pst,ResultSet rs) {
			if (rs != null) {
				try {
					rs.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if (pst != null) {
				try {
					pst.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}

			if (conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
}
